# encoding: utf-8
# 项目名称： 常用设计模式
# @File  : 015-策略模式.py
# @Author: SunHao
# @Desc : 
# @Date  :   19:22 2024/11/06

from abc import ABC, abstractmethod


# 定义策略接口，所有具体策略都必须实现这个接口
class Strategy(ABC):
    @abstractmethod
    def execute(self, data):
        pass  # 具体策略需要实现的方法，用于执行具体的策略逻辑


# 快速策略类，实现了策略接口
class FastStrategy(Strategy):
    def execute(self, data):
        print(f'使用较快的策略处理 {data}')  # 执行快速策略的具体逻辑


# 慢速策略类，也实现了策略接口
class SlowStrategy(Strategy):
    def execute(self, data):
        print(f'使用较慢的策略处理 {data}')  # 执行慢速策略的具体逻辑


# 上下文类，用于在运行时选择具体的策略
class Context:
    def __init__(self, strategy, data):
        self._strategy = strategy  # 初始化时设置默认策略
        self._data = data  # 需要处理的数据

    def set_strategy(self, strategy):
        self._strategy = strategy  # 运行时可以更换策略

    def do_strategy(self):
        self._strategy.execute(self._data)  # 调用当前策略的执行方法


# 客户端代码示例

data = {"ak": "12346789", "sk": "abcdefg"}  # 示例数据

# 创建一个使用快速策略的上下文对象
ctx1 = Context(FastStrategy(), data)
ctx1.do_strategy()  # 执行快速策略

# 更改为慢速策略并执行
ctx1.set_strategy(SlowStrategy())
ctx1.do_strategy()  # 执行慢速策略
